/**
 * Clase Escribir
 * @author David Candia Martin
 * @version 1.0 - 03/12/13
 */

import java.io.DataOutputStream;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.ArrayList;

public class Escribir {

    private String ruta;            //Ruta de los archivos
    private ArrayList l_libro;      //Lista para el libro
    private File archivo_plano;     //Archivo de texto
    private File archivo_binario;   //Archivo binario
    private Leer leer;              //Para leer archivos

    private String[] libro;         //Vector para el libro

    //Streams de escritura para archivos binarios
    FileOutputStream f_out;
    DataOutputStream d_out;

    /**
     * Constructor
     * @param directorio (File)
     * @param nombre_archivo (String)
     */
    public Escribir(File directorio, String nombre_archivo) {

        //Guarda la ruta
        ruta = directorio.getPath();
        //Guarda el archivo de texto plano
        this.archivo_plano = new File((ruta + "\\" + nombre_archivo).toString());
        //Le pasamos el archivo de texto a "Leer"
        leer = new Leer(archivo_plano);
        //Copiamos lo leido en un vector
        l_libro = leer.leer_plano();            //Almacena el texto en un ArrayList
        libro = new String[l_libro.size()];    //Dimensiona el vector usando el ArrayList
        l_libro.toArray(libro);                 //Copiamos el ArrayList al vector de String

        //Escribimos el texto en un archivo binario
        escribir_binario();

    }

    /**
     * Genera un archivo binario con el texto del archivo plano que se encuentra
     * en la carpeta de recusos del proyecto (QUIJOTE.txt)
     */
    public void escribir_binario() {
        try {
            archivo_binario = new File(ruta + "\\QUIJOTE.bin");
            f_out = new FileOutputStream(archivo_binario);
            d_out = new DataOutputStream(f_out);
            
            for (String l : libro) {
                d_out.writeUTF(l);
            }

            d_out.writeUTF(libro.toString());
        } catch (FileNotFoundException ex) {
            ex.printStackTrace();
        } catch (IOException ex) {
            ex.printStackTrace();
        } finally {
            try {
                d_out.close();
            } catch (IOException ex) {
                ex.printStackTrace();
            }
        }

    }

    public File get_archivoBinario() {
        return archivo_binario;
    }

}
